package tech.aistar.corejava.day11;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:常用的方法
 * @date 2019/7/29 0029
 */
public class ArrayListMethodDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("a");
        list.add("c");

        //清空集合
        //list.clear();//

        //判断集合中是否存在元素
        System.out.println(list.isEmpty());//false

        //获取集合中的元素的个数
        System.out.println(list.size());//4

        //根据下标获取 - java.lang.IndexOutOfBoundsException
        System.out.println(list.get(1));

        //找出集合中的某个元素第一次出现的位置
        //int lastIndexOf(Object obj);
        System.out.println(list.indexOf("a"));//0

        //判断集合中是否包含某个元素
        System.out.println(list.contains("a"));//true

        //移除集合中的第一次出现的元素
        //boolean  list.remove(Object obj);
       // list.remove("a");
        //System.out.println(list);//[b, a, c]

        //根据下标进行移除
        //E remove(int index);//返回的是刚刚删除的元素
        list.remove(1);

        //思考 - List<Integer> list = new ArrayList<>();
        //list.add(1);list.add(2);//list.add(3);//   list.remove(1);

        //关于集合的遍历
        //1 - 直接输出
        //2 - 通过普通for循环进行遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));//根据下标获取元素.
        }
        System.out.println("=======");

        //3 - 通过增强for循环
        for(String e:list){
            System.out.println(e);
        }

        System.out.println("=====");

        //4 - 迭代器 - JCF特有的一种迭代的方式.
        //采用的是迭代器模式
        //出现的原因是;由于每种具体的集合,底层的数据结构是不一样的 - 导致遍历的方式也是不一样
        //每个集合的底层都会实现iterator方法.
        //意義 - 不需要關心集合的底層,每個集合底層都是重寫了iterator方法,為我們訪問遍歷不同的
        //集合提供了統一的方式,不需要太關注遍歷的細節操作.本質上增強for循環底層也是採用迭代器模式

        //此處的iter就是一個迭代器對象
        Iterator<String> iter = list.iterator();

        //如果仍有元素可以被迭代,則返回true,否則返回false.
        while(iter.hasNext()){//return cursor!=size
            //返回迭代的元素
            String e = iter.next();
            System.out.println(e);
        }

    }
}
